package scene

import "sync"

//  场景管理器，负责场景分层的管理

var scenes = make(map[int32]*Scene)
var scenesLock sync.RWMutex

// Get 获取指定ID的场景
func Get(id int32) *Scene {
	return scenes[id]
}

// AddRaid 创建游戏副本,应该在程序初始化时创建
// 副本场景取消AOI，全场景广播消息
// 副本场景不会自动分层，必须手动创建
func AddRaid(id int32, width, height, gridSize float64) {
	if _, ok := scenes[id]; ok {
		return
	}
	scenesLock.Lock()
	defer scenesLock.Unlock()
	temp := make(map[int32]*Scene, len(scenes)+1)
	for k, v := range scenes {
		temp[k] = v
	}
	temp[id] = NewScene(id, width, height, gridSize, false)
	scenes = temp
}

// AddScene 添加场景,应该在程序初始化时创建
func AddScene(id int32, width, height, gridSize float64) {
	if _, ok := scenes[id]; ok {
		return
	}
	scenesLock.Lock()
	defer scenesLock.Unlock()
	temp := make(map[int32]*Scene, len(scenes)+1)
	for k, v := range scenes {
		temp[k] = v
	}
	temp[id] = NewScene(id, width, height, gridSize, true)
	scenes = temp
}
